// 1：安装axios  npm i axios
// 2:src/utils/request.js
// 3:导入
import axios from 'axios'
import { Message } from 'element-ui'
import router from '@/router' //  router====this.$router
import store from '@/store' // store===this.$store
// Message====this.$message
// 4:创建axios副本
const _axios = axios.create({
  baseURL: 'http://www.liulongbin.top:3008'
})
// 5:添加请求拦截与响应拦截
_axios.interceptors.request.use(
  config => {
    // 有时候后端非常严格,如果不需要Authorization,你加入了,它就报错
    // 需要加入的才加入,不需要加入的就不要加入了
    // 如果没有限制,统一加上就完事了
    // 如果有限制
    // console.log(config)
    if (config.url.startsWith('/my')) {
      config.headers.Authorization = store.state.login.token
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)
_axios.interceptors.response.use(
  // 状态码是2开头的
  res => {
    // console.log('响应拦截器', res)
    if (res.data.code === 0) {
      return res.data
    } else {
      // 来一个错误提示
      // 以前this是vue实例对象
      Message.error(res.data.message)
      // 提示错误后还希望接口执行.then吗?
      // 不要让接口再执行.then直接让它去执行.catch
      return Promise.reject(res.data.message)
    }
  },
  // 非2开头状态码
  error => {
    console.log('error', [error])
    // 在这里处理
    if (error.response.status === 401) {
      // token失效了
      // 清除token与用户信息
      store.commit('login/logout')
      // 提示一下
      Message.error(error.response.data.message)
      // 跳转到登陆页
      router.push('/login?redirect=' + location.href.split('#')[1])
    }
    return Promise.reject(error)
  }
)
// 6:暴露出去
export default _axios
